/**
 @file app_layer_def.h
 @brief Definición de estructuras de datos y parámetros para el funcionamiento de la capa aplicación.
 @date   25/11/2012
 @version v.0.9
 @author Julian Ovalle
         julianovalle@ula.ve
*/

#ifndef APP_LAYER_DEF_H_
#define APP_LAYER_DEF_H_

#include "packet_def.h"
#include "list.h"

//! @brief Tiempo máximo de espera en segundos por la respuesta de nodos durante el descubrimiento @see nodeDiscovery()
#define ND_TIMEOUT_SEC 2 //sec
//! @brief Tiempo máximo de espera en milisegundos por la respuesta de nodos durante el descubrimiento @see nodeDiscovery()
#define ND_TIMEOUT_MSEC 500 //msec

//! @brief Clave de la cola de mensajes de la capa aplicación. Esta cola almacena tramas especiales (AT, TX_status, etc)
//#define APP_QUEUE_KEY 0x888

//! @brief Clave de la cola de mensajes de la capa aplicación. Esta cola almacena tramas especiales (AT, TX_status, etc)
#define APP_TX_STATUS_QUEUE_NAME "/apptx"

//! @brief Clave de la cola de mensajes de la capa aplicación. Esta cola almacena tramas especiales (AT, TX_status, etc)
#define APP_AT_QUEUE_NAME "/appat"

//! @brief Clave de la cola de mensajes de la capa aplicación. Esta cola almacena tramas especiales (AT, TX_status, etc)
#define APP_ATR_QUEUE_NAME "/appatr"

//! @brief Estructura que almacena la lista de nodos de la WPAN.
typedef struct {
    uint16_t adress16; //!< Dirección de 16bits del nodo
    uint64_t adress64; //!< Dirección de 64bits del nodo
    char identifier[20]; //!< Identificador de nodo. Máximo 20 caracteres y distinto de BROADCAST_ID @see BROADCAST_ID
    int msqid; //!< Clave de la cola de mensajes recibidos de este nodo
    char msq_name[21]; //!< Nombre de archivo de la cola de mensajes recibidos de este nodo
    struct list_head node_list; //!< Representa los apuntadores de la lista de nodos
} wpan_node_t;

//! @brief Estructura para almacenar la respuesta a un comando AT en la cola de tramas especiales. Requerida por SystemV
struct AT_qbuf {
    unsigned int mtype;
    xbee_AtCommandResponse_t response;
};

//! @brief Estructura para almacenar la respuesta a un comando AT Remoto en la cola de tramas especiales. Requerida por SystemV
struct ATR_qbuf {
    unsigned int mtype;
    xbee_AtRemoteResponse_t response;
};

//! @brief Estructura para almacenar la trama de status de transmisión en la cola de tramas especiales. Requerida por SystemV
struct TX_status_qbuf {
    unsigned int mtype;
    xbee_TxStatus_t tx_status;
};

#endif /* APP_LAYER_DEF_H_ */
